ホームに戻る
出典 :
関連 :
目次 :
BindsDirectlyToSource : オブジェクトそのものをバインドソースとするか
Binding.Path で指定するバインドソースを「オブジェクト( ViewModel / DataContext )の特定のプロパティ」ではなく「オブジェクトそのもの」としたい場合に使用する。
{Binding} または {Binding .} と記述した場合もオブジェクトをそのまま渡すことができるが、この場合はプロパティ解決が行われることがある。
このため、「プロパティ解決の介入を避け、確実にオブジェクトを渡したい場合」に用いる。
但し、DataTemplate 内で DataContext が明確にデータアイテムとなっていれば {Binding} / {Binding .} でもオブジェクトが渡るため、特殊な場合を除き指定する必要は無い。
Mode : バインディングの方向
バインディングの方向と回数を指定する。BindingMode 列挙型。
| 設定値 |
方向 |
回数 |
| OneWay
|
ソース ⇒ ターゲット |
無制限 |
| OneTime
|
ソース ⇒ ターゲット |
バインド構成時のみ |
| OneWayToSource
|
ターゲット ⇒ ソース |
無制限 |
| TwoWay
|
双方向 |
無制限 |
ElementName : バインドソースとして使用する要素名
他のUI要素の Name または x:Name を指定し、そのUI要素をバインドソースとする。
これにより、UI要素間での値の共有が簡単に行える。RelativeSource とは排他。
例(XAML)
<
Slider x:Name=
"slider1" Minimum=
"1" Maximum=
"100"/>
<
TextBox Text=
"{Binding ElementName=slider1, Path=Value, Mode=TwoWay}"/>
上記は、Slider と TextBox の両コントロール間で値を共有する例である。
Slider の x:Name に指定した名称を、TextBox の Binding.ElementName として指定し、
- ソース : Slider.Value (slider1.Value)
- ターゲット : TextBox.Text
の双方向( Mode=TwoWay )バインディングを構成している。
これにより、Slider で選択した値が TextBox に表示されるとともに、TextBox に値を入力した場合も Slider に反映される。
RelativeSource : バインドソースとして使用する要素を相対的に指定
他のUI要素を相対的に指定してバインドソースとする。ElementName とは排他。
例(XAML)
<
Binding RelativeSource=
"{RelativeSource TemplatedParent}"/>
<
Binding RelativeSource=
"{RelativeSource Self}"/>
<
Object property=
"{Binding RelativeSource={RelativeSource TemplatedParent} ...}" ... />
RelativeSource を指定する際は RelativeSource マークアップ拡張( RelativeSource="{RelativeSource mode}" )を用いる。
mode には下表の参照モードを指定する。
| 参照モード
( RelativeSource.Mode )
|
説明 |
| FindAncestor (既定値) |
先祖のプロパティを参照(後述) |
| Self |
自身のプロパティを参照 |
| PreviousData |
直前の要素のプロパティを参照 |
| TemplatedParent |
テンプレートの適用先(親)のプロパティを参照(後述) |
FindAncestor : 先祖を参照
指定された条件に合致するまで親要素を辿り、該当する要素のプロパティを参照する。
- AncestorType
- 参照先要素の型
- AncestorLevel
- 自身を基準として、何番目の要素を参照するか
|
AncestorLevel |
| n (1以上の自然数) |
指定なし |
| AncestorType |
T (UI要素の型) |
n 番目に見つかった T |
最初に見つかった T |
| 指定なし |
n 番目の要素 |
直接の親 |
例(XAML)

上記のコードでは最初に見つかった Canvas の ActualWidth 、ActualHeight を Border の Width および Height とバインドする。
Border の下位にある InkCanvas も同様である。
TemplatedParent : テンプレートの親を参照
ControlTemplate または
DataTemplate 内部から、当該テンプレートを適用した要素のプロパティを参照する際に用いる。
上記のコードではテンプレート(
TargetType="Button" )中で TemplatedParent を用いているため、テンプレートが適用された Button の Content プロパティがバインドソースとなる。
UpdateSourceTrigger : バインドソースを更新する契機
バインディングターゲットの値が変更された際に、内容をソースに反映するタイミングを制御する。UpdateSourceTrigger 列挙型。
通常、多くのコントロールではターゲットの変更が即座に反映されるが、Text プロパティは例外的にコントロールがフォーカスを失った際に反映される。
このため TextBox の入力を
検証したり、入力に連動してコントロールの状態を変更する場合などはこのプロパティを変更し、ソースの変更が即座に行われるようにする。
| 設定値 |
説明 |
備考 |
| Default (既定値)
|
ターゲットプロパティごとの既定値を適用
|
Text プロパティは LostFocus、それ以外は PropertyChanged
|
| PropertyChanged
|
ターゲットの変更を即座にソースに反映
|
|
| LostFocus
|
コントロールがフォーカスを失った際に反映
|
|
| Explicit
|
UpdateSource() メソッドがコールされた際に反映
|
|
Delay : ソース更新前の待機時間
ソースを更新する契機の発生後、指定された時間だけ待機してからソースを更新する。ミリ秒単位で指定。
NotifyOnSourceUpdated /
NotifyOnTargetUpdated : プロパティ更新時にイベントを発行するか
ソースおよびターゲットの更新時にイベントを発行する場合に指定する。
|
説明 |
発生するイベント |
| NotifyOnSourceUpdated |
ソース更新時にイベントを発行する |
Binding.SourceUpdated |
| NotifyOnTargetUpdated |
ターゲット更新時にイベントを発行する |
Binding.TargetUpdated |